package com.zenithmind.news.pojo.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.util.List;

/**
 * 用户订阅DTO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "用户订阅DTO")
public class SubscriptionDTO {

    /**
     * 订阅类型（1-分类，2-标签，3-关键词，4-作者，5-来源）
     */
    @NotNull(message = "订阅类型不能为空")
    @Schema(description = "订阅类型（1-分类，2-标签，3-关键词，4-作者，5-来源）", example = "1")
    private Integer type;

    /**
     * 订阅目标ID或值
     */
    @NotBlank(message = "订阅目标不能为空")
    @Schema(description = "订阅目标ID或值", example = "1234567890")
    private String target;

    /**
     * 订阅目标名称
     */
    @Schema(description = "订阅目标名称", example = "科技新闻")
    private String targetName;

    /**
     * 推送方式列表
     */
    @Schema(description = "推送方式列表", example = "[\"websocket\", \"email\"]")
    private List<String> pushMethods;

    /**
     * 推送频率（1-实时，2-每小时，3-每日，4-每周）
     */
    @Schema(description = "推送频率（1-实时，2-每小时，3-每日，4-每周）", example = "1")
    private Integer pushFrequency = 1;

    /**
     * 推送时间段
     */
    @Schema(description = "推送时间段", example = "{\"start\": \"09:00\", \"end\": \"18:00\"}")
    private PushTimeRange pushTimeRange;

    /**
     * 是否接收推送（0-否，1-是）
     */
    @Schema(description = "是否接收推送（0-否，1-是）", example = "1")
    private Integer enablePush = 1;

    /**
     * 优先级（1-低，2-中，3-高）
     */
    @Schema(description = "优先级（1-低，2-中，3-高）", example = "2")
    private Integer priority = 2;

    /**
     * 推送时间段
     */
    @Data
    @Schema(description = "推送时间段")
    public static class PushTimeRange {
        
        /**
         * 开始时间
         */
        @Schema(description = "开始时间", example = "09:00")
        private String start;

        /**
         * 结束时间
         */
        @Schema(description = "结束时间", example = "18:00")
        private String end;

        /**
         * 星期几（1-7，1表示周一）
         */
        @Schema(description = "星期几（1-7，1表示周一）", example = "[1,2,3,4,5]")
        private List<Integer> weekdays;
    }
}
